package com.lf.api.weixin;

import java.util.Arrays;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.lf.api.weixin.entity.WeixinUserInfo;

public final class JacksonUtil {

	private static final ObjectMapper objectMapper = new ObjectMapper();

	/**
	 * 
	 * Description:转换为普通JavaBean：readValue(json,Student.class)
	 * Date:2016年9月30日
	 * @author 小小书童
	 * @return T
	 */
	public static <T> T json2Bean(String jsonStr, Class<T> valueType) {
		try {
			return objectMapper.readValue(jsonStr, valueType);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}

	/**
	 * 转换为List,如List<Student>,将第二个参数传递为Student[].class.
	 * 然后使用Arrays.asList();方法把得到的数组转换为特定类型的List
	 * Description:json数组转List
	 * Date:2016年9月30日
	 * @author 小小书童
	 * @return T
	 */
	public static <T> T json2Bean(String jsonStr, TypeReference<T> valueTypeRef) {
		try {
			return objectMapper.readValue(jsonStr, valueTypeRef);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}

	/**
	 * 
	 * Description:把JavaBean转换为json字符串
	 * Date:2016年9月30日
	 * @author 小小书童
	 * @return String
	 */
	public static String bean2JSon(Object object) {
		try {
			return objectMapper.writeValueAsString(object);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void main(String[] args) {
		WeixinUserInfo userInfo = new WeixinUserInfo();
		userInfo.setCity("深圳");
		userInfo.setNickname("小小书童");
		System.out.println(bean2JSon(userInfo));
		
		String json =  "[{\"subscribe\":0,\"nickname\":\"小小书童1\",\"sex\":0,\"country\":null,\"province\":null,\"city\":\"深圳\",\"language\":null,\"openid\":null,\"subscribe_time\":null,\"headimgurl\":null},{\"subscribe\":0,\"nickname\":\"小小书童2\",\"sex\":0,\"country\":null,\"province\":null,\"city\":\"深圳\",\"language\":null,\"openid\":null,\"subscribe_time\":null,\"headimgurl\":null},{\"subscribe\":0,\"nickname\":\"小小书童3\",\"sex\":0,\"country\":null,\"province\":null,\"city\":\"深圳\",\"language\":null,\"openid\":null,\"subscribe_time\":null,\"headimgurl\":null}]";
		WeixinUserInfo[] users = json2Bean(json, WeixinUserInfo[].class);
		System.out.println(Arrays.asList(users));
	}
}